package com.xr.blog.pojo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

import lombok.Data;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 文章表
 * 
 * @author XRJ
 * @email 1033835209@qq.com
 * @date 2020-07-07 20:31:38
 */
@Data
@TableName("blog_article")
@Valid
public class BlogArticle implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 
	 */
	@TableId
	@NotNull(groups = {Update.class},message = "主键不能为空")
	private Long id;
	/**
	 * 文章详情页链接
	 */
	private String url;
	/**
	 * 文章标题
	 */
	@NotBlank(groups = {Insert.class},message = "文章标题不能为空")
	private String title;
	/**
	 * 文章描述
	 */
	private String description;
	/**
	 * 文章的预览图片
	 */
	private String image;
	/**
	 * 文章内容
	 */
	@NotBlank(groups = {Insert.class},message = "文章内容不能为空")
	private String content;
	/**
	 *  Markdown格式的文章内容
	 */
	private String contentMd;
	/**
	 * 分类ID
	 */
	private Long categoryId;
	/**
	 * 发表时间
	 */
	private Date createTime;
	/**
	 * 最后更新时间
	 */
	@TableField(update="now()")
	private Date updateTime;
	/**
	 * 文章是否置顶  0：否  1：是
	 */
	private Boolean isTop;
	/**
	 * 是否开启评论 0：关闭 1：开启
	 */
	private Boolean isComment;
	/**
	 * 是否为原创文章 0：转载 1：原创
	 */
	private Boolean isOriginal;
	/**
	 * 原文链接，转载文章才需填写
	 */
	private String sourceUrl;
	/**
	 * 访问量
	 */
	private Integer visits;
	/**
	 * 状态 0：草稿 1：已发布 2：回收站
	 */
	private Integer status;
	/**
	 * 文章类型 0：普通文章 1：自定义文章
	 */
	private Integer type;

	/**
	 * 文章标签
	 */
	@TableField(exist = false)
	private List<BlogTag> tags;

	/**
	 * 文章分类
	 */
	@TableField(exist = false)
	private BlogCategory category;

	/**
	 * 获得文章关键字
	 * @return
	 */
	public String getKeywords() {
		if(tags==null||tags.isEmpty()){
			return null;
		}
		List<String> list=tags.stream().map(BlogTag::getName).collect(Collectors.toList());
		return String.join(",",list);
	}

}
